#调用OpenAI的Embedding模型将文本转换为向量。
import os
from openai import OpenAI


class EmbeddingClient:
    def __init__(self, api_key,base_url):
        """
       初始化 EmbeddingClient。
       参数:
           api_key (str): OpenAI API 密钥。
           base_url (str): 。
           model (str, optional): 使用的 Embedding 模型名称。默认为 "text-embedding-v1"。
       """
        self.client = OpenAI(api_key=api_key, base_url=base_url)

    # 向量化,dimensions:向量维度
    def get_embeddings(self,texts, model="text-embedding-v1", dimensions=None):
        """
        将文本列表转换为向量。

        参数:
            texts (List[str]): 需要转换为向量的文本列表。
            dimensions (int, optional): 生成向量的维度。默认为 None，使用模型默认维度。

        返回:
            List[List[float]]: 文本对应的向量列表。
        """
        if dimensions:
            data = self.client.embeddings.create(
                input=texts,
                model=model,
                dimensions=dimensions
            ).data
        else:
            data = self.client.embeddings.create(
                input=texts,
                model=model
            ).data
        # 提取并返回向量列表
        return [x.embedding for x in data]


#-------------示例用法--------------
# 初始化 EmbeddingClient
# api_key = "your_openai_api_key"  # 替换为你的 OpenAI API 密钥
# embedding_client = EmbeddingClient(api_key)
#
# # 定义文本列表
# texts = [
#     "人工智能是模拟人类智能的技术。",
#     "它可以通过机器学习算法进行训练。"
# ]
#
# # 获取文本的向量
# embeddings = embedding_client.get_embeddings(texts)
#
# # 打印向量
# for i, embedding in enumerate(embeddings):
#     print(f"文本 {i + 1} 的向量：{embedding}")